From 8a2fbde70d116255e9594db5e95654791f92acb0 Mon Sep 17 00:00:00 2001 From: Robert Lipe Date: Sun, 8 Dec 2019 19:10:19 -0600 Subject: [PATCH] Add gbfreadbuf to simplify object storage. --- gbfile.cc | 14 +++++++++++++- gbfile.h | 2 ++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/gbfile.cc b/gbfile.cc index 71210f0d1..51fd6a282 100644 --- a/gbfile.cc +++ b/gbfile.cc @@ -692,8 +692,8 @@ gbfread(void* buf, const gbsize_t size, const gbsize_t members, gbfile* file) } return file->fileread(buf, size, members, file); } - // This probably makes an unnecessary alloc/copy, but keeps the above (kinda + // goofy) calling signature. gbsize_t gbfread(QString& buf, const gbsize_t size, @@ -706,6 +706,18 @@ gbfread(QString& buf, const gbsize_t size, return retval; } +QByteArray gbfreadbuf(gbsize_t size, gbfile* file) { + QByteArray tmp; + tmp.resize(size); + gbsize_t nbytes = gbfread(tmp.data(), 1, size, file); + + if (nbytes != size) { + Fatal() << file->module << "Attempted to read " << size << + "bytes, but only " << nbytes << "were available."; + } + return tmp; +} + /* * gbvfprintf: (as vfprintf) */ diff --git a/gbfile.h b/gbfile.h index 36ebad88d..ad8f3fc99 100644 --- a/gbfile.h +++ b/gbfile.h @@ -93,6 +93,8 @@ void gbfclose(gbfile* file); gbsize_t gbfread(void* buf, gbsize_t size, gbsize_t members, gbfile* file); gbsize_t gbfread(QString& buf, gbsize_t size, gbsize_t members, gbfile* file); +// Convenience wrapper for above, but ignoring the possibility of endian swapping. +QByteArray gbfreadbuf(gbsize_t size, gbfile* file); int gbfgetc(gbfile* file); QString gbfgets(char* buf, int len, gbfile* file); -- 2.30.2